from docx import Document
import win32com
from win32com.client import Dispatch
import pymysql

# 获取英文表名
def get_ywbb_list():
    return ['GB_T15657_1995',
            'GB_T16751_3_1997',
            'GB_T16835_1997',
            'GB_T2261_1_2003',
            'GB_T2261_4_2003',
            '2.7 GB_T2659_2000',
            '2.8 GB_T3304_1991',
            'GB_T4658_2006',
            'GB_T4761_2008',
            'GB_T2261_2_2003',
            'CV02_01_101',
            'CV0209_01',
            'CV03_00_104',
            'CV04_50_005ABO',
            '2.16 CV04_50_020Rh',
            'CV04_50_021',
            'CV05_01_040',
            'CV05_10_010',
            'CV05_10_019',
            'CV05_10_021',
            'CV05_10_022',
            'CV05_10_023',
            'CV05_10_024',
            'CV06_00_101',
            'CV06_00_102',
            'CV06_00_103',
            'CVX_AnesthesiaMode',
            'CV06_00_207',
            'CV06_00_208',
            'CV06_00_220',
            'CV06_00_221',
            'CV06_00_222',
            'CV06_00_224',
            'CV06_00_226',
            'CV06_00_227',
            'CV08_30_005',
            'CV08_50_002',
            'CV09_00_403',
            'CV5502_20',
            'CV02_01_205',
            '*CVX_ContactCategory',
            'CVX_MZZYBZ',
            'CVX_DeactivateUseSign',
            'CVX_CZBZDM',
            'CVX_JZGCHZQXDM',
            'CVX_SSHHZQXDM',
            'CVX_HXLXDM',
            'CVX_SXXZDM',
            'CVX_SYXSDM',
            'CVX_TMQKDM',
            'CVX_YSQKDM',
            'CVX_QKHLDM',
            'CVX_XLHLDM',
            'CVX_AQHLDM',
            'CVX_FYCDDM',
            'CVX_YYZTDM',
            'CVX_ZLNLDM',
            'CVX_XYQKDM',
            'CVX_SXSBSDM',
            'CVX_ZKJLLX',
            'CVX_OrdersIdentification',
            'CVX_ZDLX',
            'CVX_ZYZDBZ',
            'CVX_ZDLB',
            'CVX_JDZD',
            'CVX_MXFYLB_MZ',
            'CVX_MXFYLB_ZY',
            'CVX_ZCDJ',
            'CVX_RYLB',
            'CVX_ZGFLBZ',
            'CVX_Basic_Drug',
            'CVX_antibacterial',
            'CVX_Spirit_Drug',
            'CVX_DrugUnit',
            'CVX_DrugNumUnit',
            'CVX_ZZZRBZ',
            'CVX_PurchaseMethod',
            'CVX_CFBS',
            'CVX_TFBZ',
            'CVX_DXSBLX',
            'CVX_FYJSFS',
            'CVX_CLLX',
            'CVX_KDDJ',
            'CVX_YBDJ',
            '* CVX_CardType',
            '*CVX_WithdrawalMark',
            '*CVX_Right',
            '*CVX_YLJGDJH_22',
            '*CVX_CardIssuer',
            'CVX_PatientIDCategory',
            'CVX_Day31InpatientMk',
            'CVX_Frequency',
            'CV5103_09',
            'CVX_InspectionResultCode',
            'CC09_00_103_00',
            'CV5197_01',
            'CVX_OPTType',
            'CVX_RecipeType',
            'CC60_01_001_06',
            'CVX_TypeOfExam',
            'CVX_ContacterRelationship',
            '2.103  CVX_RegisteredCategory',
            '2.104 CVX_AutopsyMark',
            '2.105 CV06_00_223',
            '2.106 CVX_DepartmentCode',
            '2.107 CVX_DiangnosisBasis',
            '2.108 CVX_RegisteredWay',
            '2.109 CV06_00_229',
            '2.110 CVX_AGEUNIT',
            '2.111 CVX_CURE',
            '2.112 CVX_ClinicalPath',
            '2.113 WS_TXXCSBZ',
            '2.114 CVX_Secrethierarchy',
            '2.115 CVX_StorageTypeCode',
            '2.116 CVX_WarehouseDepartment',
            '2.117 CVX_Drugclassification',
            '2.118 CC10_01_01',
            '2.119 CVX_YPLY',
            '2.120 CVX_SSLX']

# 获取中文表名
def get_zwbb_list():
    return ['厨房排风设施代码',
            '饮水代码',
            '燃料代码',
            '家庭卫生厕所代码',
            '残疾情况代码',
            '疾病代码',
            '暴露史类型代码',
            '既往疾病代码',
            '户属性代码',
            '住房性质代码',
            '房屋类型代码',
            '厨房代码',
            '主要问题代码',
            '禽畜栏代码',
            '个人状态代码',
            '药物过敏史类型代码',
            '家族史与本人关系代码',
            '老年人健康状态自我评估代码',
            '老年人生活自理能力自我评估代码',
            '身体活动频率代码',
            '饮食习惯代码',
            '饮酒频率代码',
            '饮酒种类代码',
            '口唇外观代码表',
            '齿列类别代码',
            '皮肤检查结果代码',
            '巩膜检查结果代码',
            '淋巴结检查结果代码',
            '下肢水肿检查结果代码',
            '足背动脉搏动代码',
            '肛门指诊检查结果代码表',
            '乳腺检查结果代码表',
            '体检危险因素控制代码',
            '肺部罗音代码',
            '症状代码',
            '健康指导代码',
            '接种类型代码',
            '儿保体重身高评价代码',
            '儿保大便性状代码',
            '营养评价代码',
            '户籍类型代码',
            '面色代码',
            '黄疸部位代码',
            '前囟评价代码',
            '皮肤异常代码',
            '脐带代码',
            '健康指导代码',
            '可疑佝偻病症状代码',
            '可疑佝偻病体征代码',
            '1-2岁保健指导代码',
            '3-6岁保健指导代码',
            '儿保出生情况代码',
            '两次随访间患病情况代码',
            '检查年龄段代码',
            '母亲妊娠期患病详述代码',
            '新生儿畸形代码',
            '儿保结案原因代码',
            '发育评估级联代码1',
            '发育评估级联代码2',
            '发育评估级联代码3',
            '检验结果代码',
            '阴道分泌物代码',
            '阴道清洁度代码',
            '妇保初检保健指导代码',
            '妇保健康教育指导代码',
            '妇社司指导代码',
            '妇保产后保健及计划生育指导代码',
            '妇保健康指导代码',
            '会阴裂伤情况代码',
            '妇保既往史代码',
            '妇保家族病史代码',
            '妇保个人史代码',
            '外阴异常详述代码',
            '宫颈异常详述代码',
            '产前随访胎位代码',
            '产时情况胎位代码',
            '子痫前期代码',
            '产后出血原因代码',
            '胎数代码',
            '出生结局代码',
            '预防接种代码',
            '乙肝免疫球蛋白代码',
            '非梅毒螺旋体抗原血清学试验方法代码',
            '梅毒螺旋体抗原血清学试验方法代码',
            '访视方式代码',
            '自理能力代码',
            'BMI评价代码',
            '视力代码',
            '牙齿残缺代码',
            '不良生活方式代码',
            '慢病情况代码',
            '智力状态代码',
            '抑郁情况代码',
            '症状代码',
            '护理情况代码',
            '中医药保健指导代码',
            '吸烟情况代码',
            '饮酒情况代码',
            '饮酒类型代码',
            '此次随访分类代码',
            '随访方式代码',
            '非药物治疗措施代码',
            '摄盐情况代码',
            '高血压运动情况代码',
            '锻炼情况代码',
            '高血压发现方式代码',
            '医院类型代码',
            '高血压类型代码',
            '心血管危险因素代码',
            '靶器官损害代码',
            '目前并发症-脑血管疾病代码',
            '目前并发症-心脏疾病代码',
            '目前并发症-肾脏疾病代码',
            '目前并发症-血管疾病代码',
            '生活自理能力代码',
            '高血压合并症-糖尿病代码',
            '危险分层代码',
            '管理级别代码',
            '血压分层结果代码',
            '患者自感症状代码',
            '不/间断服药原因代码',
            '药物治疗建议代码',
            '接受管理程度代码',
            '转诊原因代码',
            '并发症情况代码',
            '降压效果代码',
            '总体评价代码',
            '高血压危险因素代码',
            '并存的相关疾病代码',
            '饮酒类型代码',
            '吸烟情况代码',
            '饮酒情况代码',
            '随访方式代码',
            '此次随访分类代码',
            '医院类型代码',
            '糖尿病发现方式代码',
            '确诊时并发症情况代码',
            '非药物治疗措施代码',
            '摄盐情况代码',
            '饮食建议代码',
            '糖尿病运动情况代码',
            '运动建议代码',
            '足背动脉搏动代码',
            '管理结果代码',
            '症状代码',
            '烟酒建议代码',
            '转诊原因代码',
            '糖尿病危险因素代码',
            '降糖效果代码',
            '目前并发症代码',
            '足背动脉搏动位置代码',
            '目前并发症治疗方式代码',
            '管理级别代码',
            '锻炼情况代码',
            '精神病症状代码',
            '治疗效果代码',
            '精神病随访登记康复措施代码',
            '危险性评级代码',
            '既往主要症状代码',
            '随访方式代码',
            '危险行为代码',
            '精神病专项档案家庭经济状况代码',
            '监护人与患者关系代码',
            '关锁情况代码',
            '精神病死亡原因代码',
            '精神病随访登记变动情况代码',
            '精神病随访登记不良反应代码',
            '住院情况代码',
            '精神病职业代码',
            '门诊代码',
            '躯体疾病详述代码',
            '自知力代码',
            '用药情况代码',
            '本次随访分类代码',
            '既往关锁情况代码',
            '随访方式代码',
            '撤销管理原因代码',
            '死亡地点代码',
            '诊断依据代码',
            '医院类型代码',
            '吸烟史代码',
            '治疗情况代码',
            '首次手术性质代码',
            '目前情况代码',
            '撤销管理原因代码',
            '死亡地点代码',
            '医院类型代码',
            '临床症状诊断依据代码',
            '脑卒中诊断代码',
            '冠心病诊断代码',
            '病史代码',
            '本次卒中发病时间与CT时间间隔代码',
            '首要症状代码',
            '治疗情况代码',
            '药物治疗代码',
            '吸烟史代码',
            '目前情况代码',
            '结核病患者症状代码',
            '药品剂型代码',
            '督导人员类别代码',
            '停止治疗原因代码',
            '服药管理方式代码',
            '服药管理原因代码',
            '频率代码',
            '中医保健表',
            '年龄段表',
            '中医药健康管理服务代码',
            '户口类型代码',
            '证明状态代码',
            '最高诊断依据代码',
            '个人身份代码',
            '死亡地点代码',
            '最高诊断单位代码',
            '转诊方向代码',
            '患者去向代码',
            '处方类型代码',
            '处方辨识代码',
            '用药频度代码',
            '剂量单位代码',
            '数量单位代码',
            '病人标识类别代码',
            '检查类型代码',
            '年龄单位代码',
            '治疗类别代码',
            '实施临床路径代码',
            '死亡患者尸检标志代码',
            '病案质量代码',
            '中医病证分类代码',
            '治法代码',
            '户口属性代码',
            '性别代码',
            '婚姻状况代码',
            '从业状况（个人身份）代码',
            '国籍代码',
            '中国各民族名称的罗马字母拼写法和代码',
            '文化程度代码',
            '家庭关系代码',
            '职业代码',
            '症状分类代码',
            '证件类别代码',
            '分娩地点代码',
            '地址类别代码',
            '分娩方式代码',
            '血型代码',
            'RH血型代码',
            '中医体质代码',
            '转归情况代码',
            '手术切口类别代码',
            '手术切口愈合等级代码',
            '手术级别代码',
            '用药途径代码',
            '麻醉方式代码',
            '离院方式代码',
            '医疗费用支付方式代码',
            '药物剂型代码',
            '入院途径代码',
            '门诊住院类别代码',
            '科室代码',
            '体检项目代码',
            '检验项目代码',
            '检查项目代码',
            '居住类型代码',
            '卡类型代码',
            '服药依从性代码',
            '听力筛查代码',
            '喂养方式代码']

# 插入MySQL
def save_data(data):
    conn = pymysql.connect('127.0.0.1', 'root', 'root', 'test', charset='utf8')
    try:
        with conn.cursor() as cursor:
            sql = "insert into dzjkda(zwbm,dm,mc) values(%s,%s,%s)"
            cursor.executemany(sql, data)
            conn.commit()
    except:
        conn.rollback()
    finally:
        conn.close()


def deal_word():
    # 文件夹绝对路径
    word_path = 'D:\\工作文件\\永康大数据\\金华市平台对接公卫标准\\附件3.浙江省电子健康档案数据传输规范-标准字典与代码.docx'
    # 打开word应用程序
    # s = "word.application"
    # word = win32com.client.gencache.EnsureDispatch(s)
    # doc = word.Documents.Open(word_path)  # 打开word文件
    # doc.SaveAs("{}x".format(word_path), 12)  # 另存为后缀为".docx"的文件，其中参数12指docx文件
    # doc.Close()  # 关闭原来word文件
    # word.Quit()
    # print("另存为完成！")
    # word_path = word_path + 'x'
    document = Document(word_path)  # 读入文件
    tables = document.tables  # 获取文件中的表格集
    zw = get_zwbb_list()
    # yw = get_ywbb_list()
    for i in range(0, len(tables)):
        table = tables[i]
        data_list = []
        # 只取前2列
        for j in range(1, len(table.rows)):
            row = [k.text for k in table.rows[j].cells[0:2]]
            row.insert(0, zw[i])
            # row.insert(0, yw[i])
            data_list.append(tuple(row))
        save_data(data_list)
    return '插入成功！'


if __name__ == '__main__':
    result = deal_word()
    print(result)

